home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / os2 / rxpop12.zip / GetPOP.cmd < prev    next >
OS/2 REXX Batch file  |  1996-06-25  |  8KB  |  275 lines

  1. /*------------------------------------------------------------------
  2.  * getpop.cmd :
  3.  *------------------------------------------------------------------
  4.  * 08-09-92 rnr.cmd published originally by Patrick J. Mueller
  5.  * 24-01-95 adapted as chkpop.cmd by Christoph Lechleitner
  6.  * 15-06-96 fixed for more RFC-compatibility by C. Lechleitner
  7.  * 15-06-96 adapted to getpop.cmd by Christoph Lechleitner
  8.  *------------------------------------------------------------------*/
  9.  
  10. trace off
  11.  
  12. parse arg server user password newmailfilemask
  13.  
  14. if (server = "") | (user='') | (password='') | (newmailfilemask='') then
  15.    do
  16.    say "Expecting a pop server name, a user, a password and a Filemask as parameters."
  17.    exit 1
  18.    end
  19. say ' '
  20.  
  21.  
  22. /*------------------------------------------------------------------
  23.  * initialize socket function package
  24.  *------------------------------------------------------------------*/
  25. parse source os .
  26.  
  27. call RxFuncAdd 'SysTempFileName', 'RexxUtil', 'SysTempFileName'
  28. if (os = "OS/2") then
  29.    do
  30.    if RxFuncQuery("SockLoadFuncs") then
  31.       do
  32.       rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
  33.       rc = SockLoadFuncs()
  34.       rc = RxFuncAdd("SysTempFileName","RexxUtil","SysTempFileName")
  35.       end
  36.    end
  37.  
  38. if (os = "AIX/6000") then
  39.    do
  40.    rc = SysAddFuncPkg("rxsock.dll")
  41.    end
  42.  
  43. /*------------------------------------------------------------------
  44.  * get address of server
  45.  *------------------------------------------------------------------*/
  46. rc = SockGetHostByName(server,"host.!")
  47. if (rc = 0) then
  48.    do
  49.    say "Unable to resolve server name" server
  50.    exit
  51.    end
  52.  
  53. server = host.!addr
  54.  
  55. /*------------------------------------------------------------------
  56.  * open socket
  57.  *------------------------------------------------------------------*/
  58. sock = SockSocket("AF_INET","SOCK_STREAM","IPPROTO_TCP")
  59. if (sock = -1) then
  60.    do
  61.    say "Error opening socket:" errno
  62.    exit
  63.    end
  64.  
  65. /*------------------------------------------------------------------
  66.  * connect socket
  67.  *------------------------------------------------------------------*/
  68. server.!family = "AF_INET"
  69. server.!port   = 110
  70. server.!addr   = server
  71.  
  72. rc = SockConnect(sock,"server.!")
  73. if (rc = -1) then
  74.    Error(sock,rc,"Error connecting to popserver :" errno)
  75.  
  76.    trc = GetResponse(sock)
  77.  
  78.    trc = SendMessage(sock,'USER 'user)
  79.    trc = GetResponse(sock)
  80.    parse var line.1 status rest
  81.    if status <> '+OK' then
  82.      do
  83.        say ' Error: User' user 'unknown on' server '.'
  84.        qrc = SendMessage(sock,'QUIT')
  85.        qrc = SockSoclose(sock)
  86.        exit
  87.      end
  88.  
  89.    trc = SendMessage(sock,'PASS 'password)
  90.    trc = GetResponse(sock)
  91.    parse var line.1 status rest
  92.    if status <> '+OK' then
  93.      do
  94.        say ' Error: Password wrong for' user ' on 'server'.'
  95.        qrc = SendMessage(sock,'QUIT')
  96.        qrc = SockSoclose(sock)
  97.        exit
  98.      end
  99.    else
  100.      do 
  101.        trc = SendMessage(sock,'LIST')
  102.        trc = GetResponse(sock)
  103.        messages = 0
  104.        do 
  105.          msginfo = GetResponseLine(sock)
  106.          do while msginfo <> '.'
  107.            messages = messages + 1
  108.            msginfo = GetResponseLine(sock)
  109.          end
  110.          if messages = 0 
  111.          then say ' There is no message waiting for you.'
  112.          else
  113.            do 
  114.              say ' There are' messages 'messages waiting for you.'
  115.              trc = SendMessage(sock,'LIST')
  116.              trc = GetResponse(sock)
  117.              do 
  118.                msginfo = GetResponseLine(sock)
  119.                do while msginfo <> '.'
  120.                  parse var msginfo number size
  121.                  say ' Message' number 'has' size 'bytes.'
  122.                  msginfo = GetResponseLine(sock)
  123.                end
  124.              end /* do */
  125.              /* Get Mails */
  126.              do i = 1 to messages
  127.                say ' Getting Message' i
  128.                trc = SendMessage(sock,'RETR ' i)
  129.                trc = GetResponse(sock)
  130.                parse var line.1 status rest
  131.                newMailFile = SysTempFileName(newmailfilemask)
  132.                if newmailfile = '' then newmailfile = newmailfilemask
  133.                oneline = GetResponseLine(sock)
  134.                do while oneline <> '.'
  135.                  call lineout newMailFile, oneline
  136.                  oneline = GetResponseLine(sock)
  137.                end
  138.                call lineout newMailFile
  139.                trc = SendMessage(sock,'DELE ' i)
  140.                trc = GetResponse(sock)
  141.                parse var line.1 status rest
  142.                say ' Got and deleted Message' i
  143.              end  
  144.        end
  145.  
  146.    trc = SendMessage(sock,'QUIT')
  147.    trc = GetResponse(sock)
  148.  
  149. /*------------------------------------------------------------------
  150.  * quittin' time!
  151.  *------------------------------------------------------------------*/
  152. /* rc = SendMessage(sock,"quit") */
  153. rc = SockSoclose(sock)
  154. exit
  155.  
  156.  
  157. /*------------------------------------------------------------------
  158.  * help
  159.  *------------------------------------------------------------------*/
  160. Help: procedure
  161.    say "commands:"
  162.    say
  163.    say "quit    - to quit"
  164.    say "group   - to change to a particular group"
  165.    say "article - to see an article"
  166.    say
  167.    return ""
  168.  
  169. /*------------------------------------------------------------------
  170.  * get a response from the server
  171.  *------------------------------------------------------------------*/
  172. GetResponse:     procedure expose !. line.
  173.    sock = arg(1)
  174.  
  175.    moreids = "100 215 220 221 222 223 230 231"
  176.  
  177.    line.0 = 1
  178.    line.1 = GetResponseLine(sock)
  179.  
  180.    parse var line.1 rid .
  181.  
  182.    if (wordpos(rid,moreids) = 0) then
  183.       return ""
  184.  
  185.    say ' getting further lines '
  186.  
  187.    do forever
  188.       o = line.0 + 1
  189.  
  190.       line.o = GetResponseLine(sock)
  191.  
  192.       if (line.o = ".") then
  193.          return ""
  194.  
  195.       line.0 = o
  196.    end
  197.  
  198.    return ""
  199.  
  200. /*------------------------------------------------------------------
  201.  * get a line from the server
  202.  *------------------------------------------------------------------*/
  203. GetResponseLine: procedure expose !.
  204.    sock = arg(1)
  205.  
  206.    crlf = d2c(13) || d2c(10)
  207.  
  208.    if (symbol('!.buff') = "LIT") then
  209.       !.buff = ""
  210.  
  211.    do while (pos(crlf,!.buff) = 0)
  212.       rc = SockRecv(sock,"data",8000)
  213.       !.buff = !.buff || data
  214.    end
  215.  
  216.    /* say ' got data "' data '"' */
  217.    /* say ' buff = "' !.buff '"' */
  218.  
  219.  
  220.    p = pos(crlf,!.buff)
  221.  
  222.    line = substr(!.buff,1,p-1)
  223.    !.buff = substr(!.buff,p+2)
  224.  
  225.    return line
  226.  
  227. /*------------------------------------------------------------------
  228.  * send a string to the server
  229.  *------------------------------------------------------------------*/
  230. SendMessage:     procedure expose !.
  231.    sock = arg(1)
  232.    data = arg(2) || d2c(13) || d2c(10)
  233.  
  234.    /* say 'Sending "'data'" to server.' */
  235.    len = length(data)
  236.    do while (len > 0)
  237.  
  238.       len = SockSend(sock,data);
  239.       /* say 'Returncode: ' len   */
  240.       /* say 'Errorcode:  ' errno */
  241.       /*
  242.       if (errno <> 0) then
  243.          Error(-1,rc,"Error sending data to server.")
  244.       */
  245.       if (len <= 0) then
  246.          Error(sock,100,"Server closed the connection.")
  247.       
  248.       data = substr(data,len+1)
  249.       len  = length(data)
  250.    end
  251.  
  252.    return i
  253.  
  254. /*------------------------------------------------------------------
  255.  * halting ...
  256.  *------------------------------------------------------------------*/
  257. Halting:
  258.    Error(sock,1,"error on line" sigl)
  259.  
  260. /*------------------------------------------------------------------
  261.  * exit with a message and return code
  262.  *------------------------------------------------------------------*/
  263. Error: procedure
  264.    sock = arg(1)
  265.    retc = arg(2)
  266.    msg  = arg(3)
  267.  
  268.    if (sock <> -1) then
  269.       rc = SockSoClose(sock)
  270.  
  271.    say msg
  272.  
  273.    exit retc
  274.  
  275.